'''
    问题:编写一个可以计算给定数的阶乘的程序。结果应该以逗号分隔的顺序打印在一行上。假设向程序提供以下输入:8
    则输出为:40320
    其中0的阶乘为1，n为大于0的整数n的阶乘=1*2*3...*n
'''
#方法1:单个输入(可以设置一个循环，让用户自己选择退出)可以选择加上语音播报(win32com.client)
# while True:
#     num = input("请输入需要计算的阶乘的数：")
#     if int(num)==0:
#         print("0的阶乘结果为：%d" % (1),sep=',')
#     else:
#         clum = 1
#         for i in range(1,int(num)+1):
#             clum *=i
#         print("{}的阶乘结果为：{}".format(num,clum))
#     ok = input("是否继续y(继续) or n(退出):")
#     if ok=='ok':
#         continue
#     else:
#         break

#方法1:多输入的时候，一次性输入多个数字，输出每个数的结果，以逗号隔开
#创建多个数字的输入方式1
# num_count = input("请输入你需要计算的阶乘数的个数：")
# num_list = [int(input()) for i in range(1,int(num_count)+1)]
# print(num_list)
#创建多个数字的输入方式2
# num_str = input("请输入你需要计算的阶乘数的数(多个数的阶乘输入的时候以逗号隔开)：")
# print(num_str)
# num_list = [int(i) for i in num_str if i!=',']
# print(num_list)
#创建多个数字的输入方式3
# num_str = input("请输入多个数(输入的时候以逗号隔开)：")
# num_list = [int(i) for i in num_str.strip('').split(',')]
#利用创建的数字计算阶乘
# reslut_list = []
# for j in range(len(num_list)):
#     if num_list[j]==0:
#         reslut_list.append(str(1))
#     else:
#         clum = 1
#         for  i in range(1,num_list[j]+1):
#             clum *=i
#         reslut_list.append(str(clum))
# print("对应的结果为:%s"%(','.join(reslut_list)))

#方法2：递归的方式1
clum = 1
def fac(x):
    global clum
    if x==0:
        return 1
    else:
        clum *= x
        y = x - 1
        if y != 0:
            return fac(y)
        else:
            return clum
print(fac(8))
#递归方式2
def fac2(x):
    if x==0:
        return 1
    return x*fac2(x-1)
print(fac2(8))

'''
总结：
    1.当遇到有规律的问题的时候，尽量使用递归的方式去解决问题
    2.当无法相处使用什么递归方式的时候，可以将问题分解
    3.涉及字符串的split与strip方法，
    4.input输入为字符类型,类型转换
    5.列表生成式
'''



